返回

首页

part1

这里不回答机器学习是什么,能做什么,只告诉你如何快速上手。

熟悉你手中的数据。

1.常用模块导入命令

import pandas as pd

2.文件导入命令

FILE_PATH=".CSV后缀文件存放路径"

data = pd.read_csv(FILE_PATH)

3.数据探索命令。

查看数据规模

data.shape

len(data)

查看列名

data.columns

查看列名属性

data.info()

头部数据查看

data.head()

基本统计

data.describe()

其中有:平均值(mean)、标准差(std)、最小值(min)、最大值(max)以及1/4、1/2、3/4分位数(25%、50%、75%)。

筛选数据

1.缺失值处理

data = data.dropna(axis=0)

2.选出预测目标

y = data.Price

3.选出特征。特征可以理解成影响预测结果的要素。如何确定这些要素,这是后面的话题。

data_features = ['Rooms', 'Bathroom', 'Landsize', 'Lattitude', 'Longtitude']

X = data[data_features]

建模

可以把模型理解成一个黑箱,有入口和出口,入口数据是X,出口数据是y。 
1.模型方法引入

from sklearn.tree import DecisionTreeRegressor

模型的选择对预测结果的精确度有很大影响,这里我们先选择决策树模型。你只需要对该模型有个直观的印象。 
 
2.创建和拟合

model = DecisionTreeRegressor(random_state=1)

model.fit(X,y)

random_state是为了确保每次运行都能得到相同的结果。

part2

模型拟合后关心的问题是模型是否合适。如何度量?我们引入一个新的概念:平均绝对误差(MAE)。

平均绝对误差

1.定义: 
 
2. 使用

模块导入

from sklearn.metrics import mean_absolute_error

预测和求MAE

predicted_price = model.predict(X)

mean_absolute_error(y,predicted_price)

细心的你可能会发现,我们在模型拟合和价格预测中用了同一份样本数据X,这显然有些不合理。一个常用的思路是将数据拆分成两部分,分别用来拟合模型和预测结果。

数据拆分

模块导入

from sklearn.model_selection import train_test_split

2.数据拆分

train_X,val_X,train_y,val_y = train_test_split(X,y,random_state=1)

3.建模、预测和计算MAE

model = DecisionTreeRegressor(random_state =1)

model.fit(train_X,train_y)

val_predictions = model.predict(val_X)

print(mean_absolute_error(val_y,val_predictions))

完整代码示例

第二部分到这里就结束了,我们了解了MAE,并学会了简单的数据拆分方法,下面是完整的代码。

FILE_PATH ="C:\\Users\\Administrator\\Desktop\\kaggle\\data\\"

FILE_INDEX ="melb_data.csv"

import pandas as pd

data = pd.read_csv(FILE_PATH+FILE_INDEX)

y = data.Price

# print(y.shape)

data_features = ['Rooms', 'Bathroom', 'Landsize', 'Lattitude', 'Longtitude']

X = data[data_features]

from sklearn.tree import DecisionTreeRegressor

# model = DecisionTreeRegressor(random_state=0)

# # print(model.fit(X,y))

# model.fit(X,y)

from sklearn.metrics import mean_absolute_error

# predicted_price = model.predict(X)

# print(mean_absolute_error(y,predicted_price))

from sklearn.model_selection import train_test_split

train_X,val_X,train_y,val_y = train_test_split(X,y,random_state=1)

model = DecisionTreeRegressor(random_state =1)

model.fit(train_X,train_y)

val_predictions = model.predict(val_X)

print(mean_absolute_error(val_y,val_predictions))

part3

这部分依旧是对模型验证的讨论。我们会接触到两个新的概念:过拟合(underfitting)和欠拟合(overfitting)。

非官方解释

大白话解释起来就是:照顾数据中的大多数,忽略极少数,这是一种好的拟合;企图去迎合全部数据导致模型预测出现很大偏差,这就是过拟合;仅仅迎合一小部分而忽视大多数,这就是欠拟合。权威解释自行百度。

模拟实验

你需要知道: 
在scikit-learn 文档中,决策树模型有许多可选配置项,很多重要的配置项都对树的高度(深度)有影响。这里我们只关注参数:max_leaf_nodes。

实验原理: 
通过改变max_leaf_nodes的值来比较MAE大小,从而选择出较适合的参数值。在这个过程中,参数值的改变会导致模型欠拟合或是过拟合。

完整代码示例:

FILE_PATH ="C:\\Users\\Administrator\\Desktop\\kaggle\\data\\"

FILE_INDEX ="melb_data.csv"

import pandas as pd

data = pd.read_csv(FILE_PATH+FILE_INDEX)

filtered_data = data.dropna(axis=0)

data_features =['Rooms', 'Bathroom', 'Landsize', 'BuildingArea',

                       'YearBuilt', 'Lattitude', 'Longtitude']

X = filtered_data[data_features]

y = filtered_data.Price

from sklearn.tree import DecisionTreeRegressor

from sklearn.metrics import mean_absolute_error

def get_mae(max_leaf_nodes,train_X,val_X,train_y,val_y):

   model = DecisionTreeRegressor(max_leaf_nodes=max_leaf_nodes,random_state=0)

   model.fit(train_X,train_y)

   preds_val = model.predict(val_X)

   mae = mean_absolute_error(val_y,preds_val)

   return(mae)

from sklearn.model_selection import train_test_split

train_X,val_X,train_y,val_y = train_test_split(X,y,random_state=1)

# compare MAE with differing values of max_leaf_nodes

for max_leaf_nodes in [5,50,500,5000]:

   my_mae = get_mae(max_leaf_nodes,train_X,val_X,train_y,val_y)

   print("Max leaf nodes: %d  \t\t Mean Absolute Error:  %d" %(max_leaf_nodes, my_mae))

结果图示: 

显然500是最佳的参数值。这一部分我们学会了通过比较MAE来确定较合适的参数值,也知道了参数值的不同可能会造成模型过拟合或者欠拟合。下一部分我们回到数据本身,探讨对原始数据的处理。

目录上一篇下一篇

本应用使用KM盒子制作